using System;
using System.Data;
using MySql.Data.MySqlClient;
using System.Collections;
using System.Collections.Specialized;
using System.Collections.Generic;
using Novapangeia.Dominio;

namespace Novapangeia.Repositorio
{	
	public partial class RepositorioTecnologia
	{	   
		
		private ISqlHelper sqlHelper;
		
		public  RepositorioTecnologia(ISqlHelper _sqlHelper)
        {
            if (_sqlHelper == null)
                sqlHelper = new SqlHelper();
            else
                sqlHelper = _sqlHelper;
        }
		
		public static class Parameters
		{
			public static MySqlParameter Id
			{
				get
				{
					return new MySqlParameter("p_Id", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Usuario_id
			{
				get
				{
					return new MySqlParameter("p_Usuario_id", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Cavalaria
			{
				get
				{
					return new MySqlParameter("p_Cavalaria", MySqlDbType.Byte, 0);
				}
			}
			
			public static MySqlParameter Engenharia
			{
				get
				{
					return new MySqlParameter("p_Engenharia", MySqlDbType.Byte, 0);
				}
			}
			
			public static MySqlParameter Maquinas
			{
				get
				{
					return new MySqlParameter("p_Maquinas", MySqlDbType.Byte, 0);
				}
			}
			
			public static MySqlParameter Espadas
			{
				get
				{
					return new MySqlParameter("p_Espadas", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Lancas
			{
				get
				{
					return new MySqlParameter("p_Lancas", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Arcos
			{
				get
				{
					return new MySqlParameter("p_Arcos", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Macas
			{
				get
				{
					return new MySqlParameter("p_Macas", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Bestas
			{
				get
				{
					return new MySqlParameter("p_Bestas", MySqlDbType.Int32, 0);
				}
			}
			
		}	
		
		//=================================================================
		//  Carrega todos os registros do banco de dados
		//=================================================================
		public List<Tecnologia> LoadAll() 
		{
			string sql = @"SELECT id, usuario_id, cavalaria, engenharia, espadas, lancas, arcos FROM tecnologia";
					
			List<Tecnologia> entityList = new List<Tecnologia>();
			
			MySqlDataReader reader = sqlHelper.ExecuteReader(CommandType.Text, sql);
			
			Tecnologia entity;
			
			while (reader.Read())
            {
                entity = prencherTecnologia(reader);
				entityList.Add(entity);
            }

            reader.Close();
			
			return entityList;
		}
	
		//=================================================================
		//  Carrega apenas um registro, buscado pela chave primária
		//=================================================================
		public Tecnologia LoadByPrimaryKey(int Id)
		{
            string sql = @"SELECT id, usuario_id, cavalaria, engenharia, espadas, lancas, arcos FROM tecnologia WHERE (id = @p_id)";

			MySqlParameter p;
			p = Parameters.Id;
			p.Value = Id;

            MySqlDataReader reader = sqlHelper.ExecuteReader(CommandType.Text, sql, new MySqlParameter[] { p }, CommandBehavior.SingleRow);
			
			Tecnologia tecnologia = new Tecnologia();
			
			if(reader.HasRows)
            {
				reader.Read();
				tecnologia = prencherTecnologia(reader);
            }
            else
            {
                tecnologia = null;
            }

            reader.Close();
			
			return tecnologia;
		}
		
        private Tecnologia prencherTecnologia(MySqlDataReader  r)
        {
            Tecnologia tecnologia = new Tecnologia();
            tecnologia.Id = r.GetInt32("Id");
            tecnologia.Usuario_id = r.GetInt32("Usuario_id");
            tecnologia.Cavalaria = r.GetBoolean("Cavalaria");
            tecnologia.Engenharia = r.GetBoolean("Engenharia");
            tecnologia.Espadas = r.GetBoolean("Espadas");
            tecnologia.Lancas = r.GetBoolean("Lancas");
            tecnologia.Arcos = r.GetBoolean("Arcos");

            return tecnologia;
        }
	
		public void cadastrarTecnologia(Tecnologia tecnologia)
		{
            string sql = @"INSERT
	                        INTO tecnologia
	                        (
		                        usuario_id,
		                        cavalaria,
		                        engenharia,
		                        espadas,
		                        lancas,
		                        arcos
	                        )
	                        VALUES
	                        (
		                        @p_usuario_id,
		                        @p_cavalaria,
		                        @p_engenharia,
		                        @p_espadas,
		                        @p_lancas,
		                        @p_arcos
	                        )";

			List<MySqlParameter> parameters = new List<MySqlParameter>();
			
			MySqlParameter p;
			
			p = Parameters.Usuario_id;
			p.Value = tecnologia.Usuario_id;
			parameters.Add(p);

			p = Parameters.Cavalaria;
			p.Value = tecnologia.Cavalaria;
			parameters.Add(p);

			p = Parameters.Engenharia;
			p.Value = tecnologia.Engenharia;
			parameters.Add(p);

			p = Parameters.Espadas;
			p.Value = tecnologia.Espadas;
			parameters.Add(p);

			p = Parameters.Lancas;
			p.Value = tecnologia.Lancas;
			parameters.Add(p);

			p = Parameters.Arcos;
			p.Value = tecnologia.Arcos;
			parameters.Add(p);


            sqlHelper.ExecuteSql(CommandType.Text, sql, parameters.ToArray());
		}
	
		public bool Update(Tecnologia entity)
		{
            string sql = @"UPDATE tecnologia
	                        SET
		                        usuario_id = @p_usuario_id,
		                        cavalaria = @p_cavalaria,
		                        engenharia = @p_engenharia,
		                        espadas = @p_espadas,
		                        lancas = @p_lancas,
		                        arcos = @p_arcos
	                        WHERE
		                        id = @p_id";

			List<MySqlParameter> parameters = new List<MySqlParameter>();
			
			MySqlParameter p;
			
			p = Parameters.Id;
			p.Value = entity.Id;
			parameters.Add(p);

			p = Parameters.Usuario_id;
			p.Value = entity.Usuario_id;
			parameters.Add(p);

			p = Parameters.Cavalaria;
			p.Value = entity.Cavalaria;
			parameters.Add(p);

			p = Parameters.Engenharia;
			p.Value = entity.Engenharia;
			parameters.Add(p);

			p = Parameters.Espadas;
			p.Value = entity.Espadas;
			parameters.Add(p);

			p = Parameters.Lancas;
			p.Value = entity.Lancas;
			parameters.Add(p);

			p = Parameters.Arcos;
			p.Value = entity.Arcos;
			parameters.Add(p);

            return sqlHelper.ExecuteSql(CommandType.Text, sql, parameters.ToArray());	
		}
	
		public bool Delete(Tecnologia entity)
		{
            string sql = @"DELETE
	                        FROM tecnologia
	                        WHERE
		                        id = @p_id";

			MySqlParameter p;
			p = Parameters.Id;
			p.Value = entity.Id;

            return sqlHelper.ExecuteSql(CommandType.Text, sql, new MySqlParameter[] { p });	
		}


        public Tecnologia ConsultarTecnologiaPorUsuarioId(int idUsuario)
        {
            string sql = @"SELECT id, usuario_id, cavalaria, engenharia, espadas, lancas, arcos FROM tecnologia WHERE (usuario_id = @p_Usuario_id)";

            MySqlParameter p;
            p = Parameters.Usuario_id;
            p.Value = idUsuario;

            MySqlDataReader reader = sqlHelper.ExecuteReader(CommandType.Text, sql, new MySqlParameter[] { p }, CommandBehavior.SingleRow);

            Tecnologia tecnologia = new Tecnologia();

            if (reader.HasRows)
            {
                reader.Read();
                tecnologia = prencherTecnologia(reader);
            }
            else
            {
                tecnologia = null;
            }

            reader.Close();

            return tecnologia;
        }
    }
}
